[1/5] xen/xenbus: Allow watches discard events before queueing
authorSeongJae Park <sjpark@amazon.de>
Mon, 14 Dec 2020 09:02:45 +0000 (10:02 +0100)
committerSalvatore Bonaccorso <carnil@debian.org>
Thu, 17 Dec 2020 05:31:52 +0000 (05:31 +0000)
commitdacd40ce5ebae448e664bf1c69e9fe68b12160e9
treedef14285c386e01d481ac3ba28fd928cccda9031
parent0658c790739ad762268d47c45a140936e592758d
[1/5] xen/xenbus: Allow watches discard events before queueing

Origin: https://git.kernel.org/linus/fed1755b118147721f2c87b37b9d66e62c39b668
Bug: https://xenbits.xen.org/xsa/advisory-349.html
Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2020-29568

If handling logics of watch events are slower than the events enqueue
logic and the events can be created from the guests, the guests could
trigger memory pressure by intensively inducing the events, because it
will create a huge number of pending events that exhausting the memory.

Fortunately, some watch events could be ignored, depending on its
handler callback.  For example, if the callback has interest in only one
single path, the watch wouldn't want multiple pending events.  Or, some
watches could ignore events to same path.

To let such watches to volutarily help avoiding the memory pressure
situation, this commit introduces new watch callback, 'will_handle'.  If
it is not NULL, it will be called for each new event just before
enqueuing it.  Then, if the callback returns false, the event will be
discarded.  No watch is using the callback for now, though.

This is part of XSA-349

Cc: stable@vger.kernel.org
Signed-off-by: SeongJae Park <sjpark@amazon.de>
Reported-by: Michael Kurth <mku@amazon.de>
Reported-by: Pawel Wieczorkiewicz <wipawel@amazon.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Gbp-Pq: Topic bugfix/all
Gbp-Pq: Name xen-xenbus-Allow-watches-discard-events-before-queue.patch
drivers/net/xen-netback/xenbus.c
drivers/xen/xenbus/xenbus_client.c
drivers/xen/xenbus/xenbus_xs.c
include/xen/xenbus.h